﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using QLMB.Models;
using QLMB.ViewModels;
using System.Net;
using System.Net.Mail;


namespace QLMB.Controllers
{
    public class CheckInController : Controller
    {
        //
        // GET: /CheckIn/

        public IBookTicketRepository Repository { get; set; }

        public CheckInController()
            : this(new BookTicketRepository())
        {

        }

        public CheckInController(IBookTicketRepository repository)
        {
            Repository = repository;
        }


        [HttpGet]
        public ActionResult Index()
        {
            CheckIn ci = new CheckIn();
            ci.NgayDi = "Hom Nay";
            //this.Repository.CheckTime(DateTime.Now.AddHours(30));
            return View(ci);
        }

        [HttpPost]
        public ActionResult Index(CheckIn ci)
        {
            VECHUYENBAY GetVeByMaVe = Repository.GetVeByMaVe(ci.Ho, ci.Ten, ci.MaVe);
            CT_VECHUYENBAY GetVeByMaCB = Repository.GetVeByMaCB(ci.Ho, ci.Ten, ci.ChuyenBay);

            if (GetVeByMaVe != null)
            {
                DateTime? Time = null;
                string NoiDi;
                if (GetVeByMaVe.LoaiVe == "Khu hoi" && GetVeByMaVe.MaTrangThaiVe == "004")
                {
                    Time = GetVeByMaVe.CT_VECHUYENBAY.Last().CHUYENBAY.NgayDi;
                    NoiDi = GetVeByMaVe.CT_VECHUYENBAY.Last().CHUYENBAY.DUONGBAY.SANBAY.MaSB;
                }
                else
                {
                    Time = GetVeByMaVe.CT_VECHUYENBAY.First().CHUYENBAY.NgayDi;
                    NoiDi = GetVeByMaVe.CT_VECHUYENBAY.First().CHUYENBAY.DUONGBAY.SANBAY.MaSB;
                }

                if (Repository.IsCheck(GetVeByMaVe.MaTrangThaiVe, GetVeByMaVe.LoaiVe) == false && ci.NoiDi == NoiDi)
                {
                    if (Repository.CheckTime((DateTime)Time) == 1 && ci.NgayDi == "Hom Nay")
                    {
                        TempData["MaVe"] = GetVeByMaVe.MaVe;
                        TempData["LoaiVe"] = GetVeByMaVe.LoaiVe;
                        TempData["SoLuong"] = (GetVeByMaVe.SoLuong).ToString();
                        return RedirectToAction("CheckIn", "CheckIn");
                    }
                    else if (Repository.CheckTime((DateTime)Time) == 2 && ci.NgayDi == "Ngay Mai")
                    {
                        TempData["MaVe"] = GetVeByMaVe.MaVe;
                        TempData["LoaiVe"] = GetVeByMaVe.LoaiVe;
                        TempData["SoLuong"] = (GetVeByMaVe.SoLuong).ToString();
                        return RedirectToAction("CheckIn", "CheckIn");
                    }
                    else
                    {
                        ViewBag.Message = "Quý khách vui lòng kiểm tra lại thời gian đi, Check In trong vòng 40h trước chuyến bay !";
                        return View(ci);
                    }
                }
                else
                {
                    ViewBag.Message = "Hành khách đã Check In hay thông tin nhập sai, Vui lòng kiểm tra lại !";
                    return View(ci);
                }
            }
            else if (GetVeByMaCB != null)
            {
                DateTime? Time = null;
                string NoiDi;
                if (GetVeByMaCB.VECHUYENBAY.LoaiVe == "Khu hoi" && GetVeByMaCB.VECHUYENBAY.MaTrangThaiVe == "004")
                {
                    Time = Repository.GetVeByMaVe(ci.Ho, ci.Ten, GetVeByMaCB.VECHUYENBAY.MaVe).CT_VECHUYENBAY.Last().CHUYENBAY.NgayDi;
                    NoiDi = Repository.GetVeByMaVe(ci.Ho, ci.Ten, GetVeByMaCB.VECHUYENBAY.MaVe).CT_VECHUYENBAY.Last().CHUYENBAY.DUONGBAY.SANBAY.MaSB;
                }
                else
                {
                    Time = Repository.GetVeByMaVe(ci.Ho, ci.Ten, GetVeByMaCB.VECHUYENBAY.MaVe).CT_VECHUYENBAY.First().CHUYENBAY.NgayDi;
                    NoiDi = Repository.GetVeByMaVe(ci.Ho, ci.Ten, GetVeByMaCB.VECHUYENBAY.MaVe).CT_VECHUYENBAY.First().CHUYENBAY.DUONGBAY.SANBAY.MaSB;
                }
                if (Repository.IsCheck(GetVeByMaCB.VECHUYENBAY.MaTrangThaiVe, GetVeByMaCB.VECHUYENBAY.LoaiVe) == false && ci.NoiDi == NoiDi)
                {
                    if (Repository.CheckTime((DateTime)Time) == 1 && ci.NgayDi == "Hom Nay")
                    {
                        TempData["MaVe"] = GetVeByMaCB.VECHUYENBAY.MaVe;
                        TempData["LoaiVe"] = GetVeByMaCB.VECHUYENBAY.LoaiVe;
                        TempData["SoLuong"] = (GetVeByMaCB.VECHUYENBAY.SoLuong).ToString();
                        return RedirectToAction("CheckIn", "CheckIn");
                    }
                    else if (Repository.CheckTime((DateTime)Time) == 2 && ci.NgayDi == "Ngay Mai")
                    {
                        TempData["MaVe"] = GetVeByMaCB.VECHUYENBAY.MaVe;
                        TempData["LoaiVe"] = GetVeByMaCB.VECHUYENBAY.LoaiVe;
                        TempData["SoLuong"] = (GetVeByMaCB.VECHUYENBAY.SoLuong).ToString();
                        return RedirectToAction("CheckIn", "CheckIn");
                    }
                    else
                    {
                        ViewBag.Message = "Quý khách vui lòng kiểm tra lại thời gian đi, Check In trong vòng 40h trước chuyến bay !";
                        return View(ci);
                    }
                }
                else
                {
                    ViewBag.Message = "Hành khách đã Check In hay thông tin nhập sai, Vui lòng kiểm tra lại !";
                    return View(ci);
                }
            }
            else
            {
                ViewBag.Message = "Quý khách vui lòng kiểm tra lại thông tin!";
                return View(ci);
            }
        }

        [HttpGet]
        public ActionResult CheckIn()
        {
            GetInfo info = new GetInfo();
            string CInByVe = TempData["MaVe"] as string;
            string LoaiVe = TempData["LoaiVe"] as string;
            string SL = TempData["SoLuong"] as string;
            int SoLuong = int.Parse(SL);
            string MaVe;
            if (CInByVe != null)
            {
                MaVe = CInByVe;
            }
            else
            {
                CT_VECHUYENBAY CInByCB = TempData["ci"] as CT_VECHUYENBAY;
                MaVe = CInByCB.MaVe;
                LoaiVe = CInByCB.VECHUYENBAY.LoaiVe;
            }
            TempData["MaVe"] = MaVe;
            TempData["LoaiVe"] = LoaiVe;
            TempData["SoLuong"] = SL;
            //Repository.IncreaseMark("hk1");
            ViewBag.InfoHK = Repository.GetInfo(MaVe, LoaiVe, Repository.CheckStatus(MaVe), SoLuong);
            return View(info);
        }

        [HttpPost]
        public ActionResult CheckIn(GetInfo Info)
        {
            string MaVe = TempData["MaVe"] as string;
            string LoaiVe = TempData["LoaiVe"] as string;
            string SoLuong = TempData["SoLuong"] as string;
            Repository.CIn(MaVe, Repository.CheckStatus(MaVe), LoaiVe);
            string Address = Repository.GetInfo(MaVe, LoaiVe, Repository.CheckStatus(MaVe), int.Parse(SoLuong)).First().HANHKHACH.Email;
            foreach (CT_VECHUYENBAY item in Repository.GetInfo(MaVe, LoaiVe, Repository.CheckStatus(MaVe), int.Parse(SoLuong)))
            {
                if (Repository.IsRelation(item.HANHKHACH.MaHK))
                {
                    Repository.IncreaseMark(item.HANHKHACH.HANHKHACHTHANTHIET.MaHK);
                }
            }
            Repository.CommitChanges();
            MySendMail email = new MySendMail();
            //email.SendMail_Thankyou(Address);            
            return RedirectToAction("Index", "Home");

        }
    }
}
